/**
 *    @file       cmd5.h
 *
 *    @brief      
 *    @details
 *
 *    @version    1.0
 *    @date       01/23/2014 10:25:18 AM
 *
 *    @author     Theophilus (), wangtf418@gmail.com
 */
#include "cmd5.h"

cmd5::cmd5() : m_initflag(0)
{

}

cmd5::~cmd5()
{

}

bf_int_t cmd5::update(const bf_uchar_t *data, bf_size_t len)
{
	if (!data || len == 0)
	{
		return BF_ERROR;
	}
	if (m_initflag == 0)
	{
		MD5_Init(&m_md5_ctx);
		m_initflag = 1;
	}
	MD5_Update(&m_md5_ctx, data, len);
	return BF_OK;
}

bf_int_t cmd5::finish(bf_uchar_t hash[16])
{
	if (!hash || m_initflag == 0)
	{
		return BF_ERROR;
	}
	MD5_Final(hash, &m_md5_ctx);
	m_initflag = 0;
	return BF_OK;
}

bf_int_t cmd5::md5(const bf_uchar_t *data, bf_size_t len, bf_uchar_t hash[16])
{
	if (!data || len == 0 || !hash)
	{
		return BF_ERROR;
	}
	MD5(data, len, hash);
	return BF_OK;
}

